package Configs

import (
	"fmt"
	"github.com/spf13/viper"
	"log"
)

var filePath = "./configs.yml"

var cfg = Config{}

// 第二种
type Config struct {
	User UserInfo `mapstructure:"user"`
}
type UserInfo struct {
	Address      string `mapstructure:"address"`
	UserName     string `mapstructure:"userName"`
	UserPassword string `mapstructure:"userPassword"`
}

func LoadConfig() *viper.Viper {
	v := viper.New()
	// 设置配置文件信息
	v.SetConfigName("configs")
	//添加读取的配置文件路径
	v.AddConfigPath("./Configs")
	////windows环境下为%GOPATH，linux环境下为$GOPATH
	//v.AddConfigPath("$GOPATH/src/")
	//设置配置文件类型
	v.SetConfigType("yml")

	// 读取配置文件
	err := v.ReadInConfig()
	if err != nil {
		fmt.Println("读取配置文件失败, 异常信息 : ", err)
	}

	// 直接从viper对象中获取key的value数据,并且可以定义类型
	log.Println(v.Get("mysqlDataBase"), "读取成功")
	//fmt.Println(v.GetInt("user.age"))
	//
	//// 判断key是否存在, 返回true/false
	//fmt.Println(v.IsSet("user.name"))
	//
	//// 设置key的value值, 优先级最高, 可以在读取配置文件之前设置
	//v.Set("user.age", 19)

	// 将文件内容解析后封装到cfg对象中
	err = v.Unmarshal(&cfg)
	if err != nil {
		fmt.Println("解析配置文件失败, 异常信息 : ", err)
	}
	return v
}

// 使用时直接调用该方法即可
func GetInfo() Config {
	return cfg
}
